package com.thank.concurrency.samples.immutable;

import com.google.common.collect.Maps;
import com.thank.concurrency.annoations.NotThreadSafe;
import lombok.extern.slf4j.Slf4j;

import java.util.Map;

/**
 * 演示final修饰基本数据类型和引用类型
 */
@Slf4j
@NotThreadSafe
public class ImmutableExample1 {

    private final static Integer i = 1;
    private final static String s = "2";

    private final static Map<Integer, Integer> map = Maps.newHashMap();

    static {
        map.put(1, 10);
        map.put(2, 20);
        map.put(3, 30);
    }

    public static void main(String[] args) {
        // 基本数据类型: 值不能修改
//        i = 2;
//        s = "x";

        // 引用类型, 只是不能指向其它对象, 但是值依然可以修改, 故线程不安全
//        map = Maps.newHashMap();
        map.put(1, 100);
        log.info("{}", map.get(0));
    }


    // final还可以修饰方法参数, 使其在方法内不可修改
    private void tesst(final int x) {
//        x = 1;
    }
}
